home *** CD-ROM | disk | FTP | other *** search
/ Alles Voor Internet / Tout Pour Internet / alles voor internet.iso / MacInternet™ / Net / Utilities / Seer family 2.0 / docs / unloved files / sp_seer_glue.p < prev   
Encoding:
Text File  |  1987-08-29  |  3.2 KB  |  96 lines  |  [TEXT/PJMM]

  1. UNIT seer_glue;
  2. INTERFACE
  3.     USES
  4.         seer_interface, mac_os_globals, bomb;
  5.     PROCEDURE configure_seer;
  6.     PROCEDURE seer_on;
  7.     PROCEDURE load_seer;
  8.     PROCEDURE open_seer;
  9. IMPLEMENTATION
  10.     PROCEDURE configure_seer;
  11.         CONST
  12.             sp_hq_size = 4000;            {use x bytes for seer header queue}
  13.             sp_dq_size = 10000;            {use x bytes for seer data queue}
  14.  
  15.         VAR
  16.             sp_header_q : Ptr;                {seer header queue}
  17.             sp_data_q : Ptr;                {seer data queue}
  18.             iqarg : SR_record;                {init queue argument record}
  19.             cs_ptr : Ptr;                    {a pointer to iqarg}
  20.             err : integer;
  21.     BEGIN
  22.         sp_header_q := NewPtr(sp_hq_size);    {allocate the header queue}
  23.         sp_data_q := NewPtr(sp_dq_size);        {allocate the data queue}
  24.         iqarg.a_initq.dbufstart := screenBits.baseAddr;    {where the data queue lives}
  25.         iqarg.a_initq.dbuflen := 20000;    {how big the data queue is}
  26.         iqarg.a_initq.hbufstart := sp_header_q; {where the header queue lives}
  27.         iqarg.a_initq.hbuflen := sp_hq_size;    {how big the header queue is}
  28.         cs_ptr := @iqarg;
  29.         err := Control(seer_refnum, ord(SRc_initq), @cs_ptr);
  30.         IF err <> noErr THEN
  31.             bomb(bomb_noinitq, StringOf(err));
  32.         WriteLn('initqarg err=', iqarg.SRe_error);
  33.     END;
  34.  
  35.     PROCEDURE seer_on;
  36.         VAR
  37.             onarg : SR_record;                {init queue argument record}
  38.             cs_ptr : Ptr;                    {a pointer to iqarg}
  39.             err : integer;
  40.     BEGIN
  41.         cs_ptr := @onarg;
  42.         err := Control(seer_refnum, ord(SRc_on), @cs_ptr);
  43.         IF err <> noErr THEN
  44.             bomb(bomb_noon, StringOf(err));
  45.         Write('SRc_on err=', onarg.SRe_error);
  46.     END;
  47.  
  48. {preform the seer load function, check its version, get a pointer to}
  49.  {seer status block}
  50.     PROCEDURE load_seer;
  51.         VAR
  52.             lodarg : SR_record;
  53.             cs_ptr : Ptr;
  54.             err : integer;
  55.     BEGIN
  56.         lodarg.a_load.major_version := SEER_MAJOR;
  57.     {since Control only passed 22 bytes and SR_record may be longer}
  58. {at the argument to control is write only anyway, we pass a pointer to SR_record}
  59.     {this pointer gets copied into a ParamBlockRec along with the csCode we pass}
  60.         cs_ptr := @lodarg;
  61.         err := Control(seer_refnum, ord(SRc_load), @cs_ptr);
  62.         IF err <> noErr THEN
  63.             bomb(bomb_noload, StringOf(err));
  64.     {remember a pointer to the seer status block}
  65.         sp_status := lodarg.a_load.status_pt;
  66.         Write('loadarg err=', lodarg.SRe_error);
  67.         WriteLn(' sp_status=', ord(sp_status));
  68.         Write(' minor version=', lodarg.a_load.minor_version);
  69.         Write(' header length=', lodarg.a_load.header_length);
  70.         WriteLn(' data overhead=', lodarg.a_load.data_overhead);
  71.         WriteLn;
  72.     END;
  73.  
  74. {open the seer device driver}
  75.     PROCEDURE open_seer;
  76.         LABEL
  77.             0;                    {exit}
  78.         VAR
  79.             err : integer;        {a local error code}
  80.             old_res_file : integer;    {resource file current before seer_drvr}
  81.     BEGIN
  82.         IF seer_refnum <> 0 THEN            {alreadyopen?}
  83.             GOTO 0;                                {yes, nothing to do then}
  84.         old_res_file := CurResFile;            {remember so we can put current resource file back}
  85.         seer_res_file := OpenResFile('seer_drvr');    {open the device driver resource file}
  86.         IF seer_res_file = -1 THEN                        {find the resource file?}
  87.             bomb(bomb_nodrvrfile, StringOf(ResError));    {no, belly up}
  88.         UseResFile(seer_res_file);            {may already be open, search it}
  89.         err := OpenDriver('.seer', seer_refnum);    {open the driver}
  90.         IF err <> noErr THEN                    {find the resource file?}
  91.             bomb(bomb_noopen, StringOf(err)); {no, belly up}
  92.         UseResFile(old_res_file);            {go back to the normal resource file}
  93. 0 :
  94.     END;
  95.  
  96. END.